/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package our.gui;

/**
 *
 * @author keysman
 */
public class ourPasswordField extends javax.swing.JPasswordField {
    // Definisco la classe che possiede le funzioni comuni a tutti gli oggetti a video
    public our.gui.commonObjectClass SETTINGS = new our.gui.commonObjectClass();

     private String CHARS_ARRAY[] = { "1234567890,.",
                                     "1234567890",
                                     "QWERTYUIOPASDFGHJKLZXCVBNM 1234567890qwertyuiopasdfghjklzxcvbnm,.:;-_àù#@èé[]*+ì^'?=)(/&%$£!|",
                                     "1234567890.",
                                     "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm",
                                     "QWERTYUIOPASDFGHJKLZXCVBNM1234567890",
                                     "1234567890"};

    public static final int TYPE_NUMERIC  = 0;
    public static final int TYPE_DATA     = 1;
    public static final int TYPE_ALFANUM  = 2;
    public static final int TYPE_IP       = 3;
    public static final int TYPE_ONLYALFA = 4;
    public static final int TYPE_CODALNUM = 5;
    public static final int TYPE_CODNUM   = 6;

    private int TYPE = 0; // Tipo di input
    private int MAXLEN = 0; // Lunghezza massima
    
    private boolean REQUIRED = false;

    public ourPasswordField()
    {
        super();
    }

    public ourPasswordField(int MAXLEN, int TYPE, boolean REQ)
    {
        super();
        this.MAXLEN = MAXLEN;
        this.TYPE = TYPE;
        this.REQUIRED = REQ;

        // Diabilito l'oggetto per default
        setEnabled(false);
        // Imposto il font
        setFont(SETTINGS.getEntryFieldFont());
        // Imposto l'altezza dell'oggetto (non funge)
        setSize(getWidth(), SETTINGS.getOurHeight());
        // Aggiungo i listener per il fuoco
        addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent evt) {
                thisFocusGained(evt);
            }
            @Override
            public void focusLost(java.awt.event.FocusEvent evt) {
                thisFocusLost(evt);
            }
        });

        // Aggiungo i listeneres per la tastiera
        addKeyListener(new java.awt.event.KeyAdapter() {
            @Override
            public void keyTyped(java.awt.event.KeyEvent evt) {
                KeyTyped(evt);
            }
        });
    }

    /**
     * Questa funzione disabilita la gestione del mouse del campo ourTextField e in caso di MOUSE_CLICKED richiama
     * la funzione di gestione del parent: ourTextField
     * @param e
     */
    @Override
    protected void processMouseEvent(java.awt.event.MouseEvent e)
    {
        boolean bConsumeEvent = true;
        if(SETTINGS.getOurForm()!=null)
        {
            if(e.paramString().indexOf("MOUSE_CLICKED")>=0)
            {
                bConsumeEvent = !(SETTINGS.getOurForm().clickOnComponent(this));
            }
            if(bConsumeEvent)
            {
                e.consume();
            } else {
                requestFocus();
                super.processMouseEvent(e);
            }
        } else if(e.paramString().indexOf("MOUSE_CLICKED")>=0) {
            requestFocus();
            super.processMouseEvent(e);
        }
    }

    // L'utente ha premuto un tasto
    private void KeyTyped(java.awt.event.KeyEvent evt) {
        // TODO add your handling code here:
        if(CHARS_ARRAY[TYPE].indexOf(evt.getKeyChar())>=0)
        {
            if(this.getSelectionStart()==0 && this.getSelectionEnd()==MAXLEN && (int)evt.getKeyChar()!=13)
            {
                super.setText("");
            }
            if(this.getPassword().length>=MAXLEN)
                evt.consume();
            // Se il campo è un numerico e premo il pulsante '.'
            // lo trasformo in ','.
            if( (TYPE==TYPE_NUMERIC) && (evt.getKeyChar()=='.') )
            {
                evt.setKeyChar(',');
            }
        } else {
           // Se il tasto premuto è stampabile (lettara, numero, simbolo)
           // ma non appartiene alla sequenza accettata, rigetta il carattere
           int iKeyCode = (int)evt.getKeyChar();
           if( (iKeyCode>=32) && (iKeyCode<=255) )
           {
               evt.consume();
           }
        }
    }

    private void thisFocusGained(java.awt.event.FocusEvent evt) {
        selectAll();
    }

    public void thisFocusLost(java.awt.event.FocusEvent evt) {
        select(0,0);
    }

}
